<template>
  <!--组织机构树-->
  <BasicTree
    v-if="!treeReloading && userIdentity === '2'"
    ref="treeElRef"
    title="部门列表"
    toolbar
    search
    showLine
    :api="loadDepartTreeData"
    :checkStrictly="true"
    :clickRowToExpand="false"
    :treeData="treeData"
    :selectedKeys="selectedKeys"
    :expandedKeys="expandedKeys"
    :autoExpandParent="autoExpandParent"
    @select="onSelect"
    @expand="onExpand"
    @search="onSearch"
  />
  <a-empty v-else description="普通员工无此权限"/>
</template>

<script lang="ts" setup>
import {inject, ref} from 'vue'
import {useMessage} from '/@/hooks/web/useMessage'
import {BasicTree} from '/@/components/Tree'
import {listMyDeptTree} from '../depart.user.api'

const prefixCls = inject('prefixCls')
const emit = defineEmits(['select'])
const { createMessage } = useMessage()

let loading = ref<boolean>(false)
// 部门树列表数据
let treeData = ref<any[]>([])
// 当前展开的项
let expandedKeys = ref<any[]>([])
// 当前选中的项
let selectedKeys = ref<any[]>([])
// 是否自动展开父级
let autoExpandParent = ref<boolean>(true)
// 用户身份
let userIdentity = ref<string>('2')
// 树组件重新加载
let treeReloading = ref<boolean>(false)
const searchKeyWord = ref<string>('')
const treeElRef = ref<any>()
// 加载部门信息
const loadDepartTreeData = async () => {
  loading.value = true
  treeData.value = []
  const data = await listMyDeptTree({ deptName: searchKeyWord.value, myDeptSearch: '1' })
  if (Array.isArray(data)) {
    treeData.value = data
    // userIdentity.value = res.message
    userIdentity.value = "2"
    autoExpandParentNode()
  }
  return data
}

// 自动展开父节点，只展开一级
function autoExpandParentNode() {
  let keys: Array<any> = []
  treeData.value.forEach((item, index) => {
    if (item.children && item.children.length > 0) {
      keys.push(item.key)
    }
    if (index === 0) {
      // 默认选中第一个
      setSelectedKey(item.id, item)
    }
  })
  if (keys.length > 0) {
    expandedKeys.value = keys
  }
}

/**
 * 设置当前选中的行
 */
function setSelectedKey(key: string, data?: object) {
  selectedKeys.value = [key]
  if (data) {
    emit('select', data)
  }
}

// 搜索事件
function onSearch(value: string) {
  searchKeyWord.value = value
  treeElRef.value && treeElRef.value.reload()
}

// 树选择事件
function onSelect(selKeys, event) {
  if (selKeys.length > 0 && selectedKeys.value[0] !== selKeys[0]) {
    setSelectedKey(selKeys[0], event.selectedNodes[0].props)
  } else {
    // 这样可以防止用户取消选择
    setSelectedKey(selectedKeys.value[0])
  }
}

// 树展开事件
function onExpand(keys) {
  expandedKeys.value = keys
  autoExpandParent.value = false
}
</script>
